/**以下全部是基于控件 基于坐标的暂不整理 */
/**
 * 第一步一定要先开启无障碍服务 最好7.0以上  7.0以下的有的命令需要root权限才可以 就没有意义了
 */
auto();//会自动检查是否开启无障碍 如果未开启会自动跳转到开启界面选择开启即可；

//<--------------- 点击命令 ---------------->
 
//点击文本 就是比如按钮中的文字

 click(text,i)//text {string} 要点击的文本 i {number} 如果相同的文本在屏幕中出现多次，则i表示要点击第几个文本, i从0开始计算 如果不填写 默认是点击所有
 click("啦啦啦", 0)//表示点击屏幕上第一个"啦啦啦", click("啦啦啦", 1)表示点击屏幕上第二个"啦啦啦"。
 longClick(text, i)//长按的意思
 UiObject.click()//控件点击
 UiObject.longClick()//控件长按


//<--------------- 滑动命令 ---------------->
scrollUp(i) //上滑此命令经测试在安卓7.0以下也有效i {number} 要滑动的控件序号  
scrollDown(i)//下滑和上述同理
UiObject.scrollForward()//控件下滑
UiObject.scrollBackward()//向后滑动
UiObject.scrollUp()//对集合中所有控件执行向上滑的操作
UiObject.scrollDown()//对集合中所有控件执行向下滑的操作
UiObject.scrollLeft()//对集合中所有控件执行向左滑的操作
UiObject.scrollRight()//右滑


//<--------------- 输入命令 ---------------->
setText(i,text)//输入文本i表示第一个输入框 从0开始计数 
input(i,text)//输入文本i表示第一个输入框 从0开始计数 
//两者区别 第一个是清空并填写 第二个是在原基础上追加（append）
UiObject.setText(text)//控制输入
UiObject.copy()//控件复制
UiObject.cut()//剪切
UiObject.paste()//粘贴

/**
 * 常见控件的类名如下：

android.widget.TextView 文本控件
android.widget.ImageView 图片控件
android.widget.Button 按钮控件
android.widget.EditText 输入框控件
android.widget.AbsListView 列表控件
android.widget.LinearLayout 线性布局
android.widget.FrameLayout 帧布局
android.widget.RelativeLayout 相对布局
android.widget.RelativeLayout 相对布局
android.support.v7.widget.RecyclerView 通常也是列表控件
 */

//<--------------- 其他命令整合（用到没有上述那么常用） ---------------->
UiSelector.textContains(str) //包含文本
UiSelector.textStartsWith(prefix)//以文本开头的组件
UiSelector.desc(str)//获取描述
UiSelector.descContains(str)//获取包含描述
UiSelector.descStartsWith(prefix)//获取开头包含描述
UiSelector.descEndsWith(suffix)//获取结尾包含描述
UiSelector.descMatches(reg)//正则表达式
UiSelector.id(resId)//id
UiSelector.idContains(str)//包含id
UiSelector.idStartsWith(prefix)//开始id
UiSelector.idEndsWith(suffix)//结束id
UiSelector.idMatches(reg)//正则表达式ID
UiSelector.className(str)//类
UiSelector.classNameContains(str)//包含类
UiSelector.classNameStartsWith(prefix)//开始类
UiSelector.classNameEndsWith(suffix)//结尾类 
UiSelector.classNameMatches(reg)//正则类
UiSelector.packageName(str)//包名
UiSelector.packageNameContains(str)//包含包
UiSelector.packageNameStartsWith(prefix)//开头包
UiSelector.packageNameEndsWith(suffix)//结束包
UiSelector.packageNameMatches(reg)//正则包 
UiSelector.bounds(left, top, right, buttom)//组件范围
UiSelector.boundsInside(left, top, right, buttom)//区域选择查找控件
UiSelector.boundsContains(left, top, right, buttom)//也是区域查找
UiSelector.drawingOrder(order)//绘制顺序


UiSelector.clickable([b = true])//是否可以点击
UiSelector.longClickable([b = true])// 表示控件是否可长按
UiSelector.checkable([b = true])//表示控件是否可勾选
UiSelector.selected([b = true])//表示控件是否被选
UiSelector.enabled([b = true])//表示控件是否已启用
UiSelector.scrollable([b = true])//表示控件是否可滑动
UiSelector.editable([b = true])//表示控件是否可编辑
UiSelector.multiLine([b = true])//表示文本或输入框控件是否是多行显示的
UiSelector.findOne()//找一个            ******** 阻塞 *******
UiSelector.findOne(timeout)//超时查找   ******** 阻塞 *******
UiSelector.findOnce()//找不到返回空
UiSelector.findOnce(i)//找第几个
UiSelector.find()//找所有
UiSelector.untilFind()//直到找到
UiSelector.exists()//是否存在
UiSelector.waitFor()//一直等待           ******** 阻塞 *******
UiSelector.filter(f) //过滤函数 
/**
 * 例如，要找出屏幕上所有文本长度为10的文本控件的代码为：

var uc = className("TextView").filter(function(w){
    return w.text().length == 10;
});
 */
UiObject.setSelection(start, end)//
/**
 * 对输入框控件设置选中的文字内容，并返回是否操作成功。

索引是从0开始计算的；并且，选中内容不包含end位置的字符。例如，如果一个输入框内容为"123456789"，要选中"4567"的文字的代码为et.setSelection(3, 7)。

该函数也可以用来设置光标位置，只要参数的end等于start，即可把输入框光标设置在start的位置。例如et.setSelection(1, 1)会把光标设置在第一个字符的后面。
 */

UiObject.collapse()//控件折叠
children()//返回该控件的所有子控件组成的控件集合。可以用于遍历一个控件的子控件
childCount()//返回子控件数目。
child(i)//返回第i+1个子控件
parent()//父控件
bounds()//范围
boundsInParent()//返回控件在父控件中的范围
drawingOrder()//返回控件在父控件中的绘制次序。该函数在安卓7.0及以上才有效，7.0以下版本调用会返回0。
id()//获取控件的id，如果一个控件没有id，则返回null。
text()//获取控件的文本，如果控件没有文本，返回""。
findByText(str)//根据文本text在子控件中递归地寻找并返回文本或描述(desc)包含这段文本str的控件，返回它们组成的集合。该函数会在当前控件的子控件，孙控件，曾孙控件...中搜索text或desc包含str的控件，并返回它们组合的集合。
findOne(selector)//根据选择器selector在该控件的子控件、孙控件...中搜索符合该选择器条件的控件，并返回找到的第一个控件；如果没有找到符合条件的控件则返回null。
/**
 * 例如，对于酷安动态列表，我们可以遍历他的子控件(每个动态列表项)，并在每个子控件中依次寻找点赞数量和图标，对于点赞数量小于10的点赞：

//找出动态列表
var list = id("recycler_view").findOne();
//遍历动态
list.children().forEach(function(child){
    //找出点赞图标
    var like = child.findOne(id("feed_action_view_like"));
    //找出点赞数量
    var likeCount = child.findOne(id("text_view"));
    //如果这两个控件没有找到就不继续了
    if(like == null || likeCount == null){
        return;
    }
    //判断点赞数量是否小于10
    if(parseInt(likeCount.text()) < 10){
        //点赞
        like.click();
    }
});
 */

find(selector)//根据选择器selector在该控件的子控件、孙控件...中搜索符合该选择器条件的控件，并返回它们组合的集合。
UiCollection//控件数量
/**
 * UiCollection"继承"于数组，实际上是一个UiObject的数组，因此可以使用数组的函数和属性，例如使用length属性获取UiCollection的大小，使用forEach函数来遍历UiCollection。

例如，采用forEach遍历屏幕上所有的文本控件并打印出文本内容的代码为：

console.show();
className("TextView").find().forEach(function(tv){
    if(tv.text() != ""){
        log(tv.text());
    }
});
也可以使用传统的数组遍历方式：

console.show();
var uc = className("TextView").find();
for(var i = 0; i < uc.length; i++){
    var tv = uc[i];
    if(tv.text() != ""){
        log(tv.text());
    }
}
UiCollection的每一个元素都是UiObject，我们可以取出他的元素进行操作，例如取出第一个UiObject并点击的代码为ui[0].click()。如果想要对该集合的所有元素进行操作，可以直接在集合上调用相应的函数，例如uc.click()，该代码会对集合上所有UiObject执行点击操作并返回是否全部点击成功。

因此，UiCollection具有所有UiObject对控件操作的函数，包括click(), longClick(), scrollForward()等等，不再赘述。
 */
UiCollection.size()//返回集合中的控件数。 历史遗留函数，相当于属性length。
UiCollection.get(i)//返回集合中第i+1个控件(UiObject)。历史遗留函数，建议直接使用数组下标的方式访问元素。
empty()//返回控件集合是否为空。
nonEmpty()//返回控件集合是否非空。
UiCollection.find(selector)//根据selector所确定的条件在该控件集合的控件、子控件、孙控件...中找到所有符合条件的控件并返回找到的控件集合。注意这会递归地遍历控件集合里所有的控件以及他们的子控件。和数组的filter函数不同。
UiCollection.findOne(selector)//根据选择器selector在该控件集合的控件的子控件、孙控件...中搜索符合该选择器条件的控件，并返回找到的第一个控件；如果没有找到符合条件的控件则返回null。
